//
//  BLNetWork.swift
//  BLLiveTelecast
//
//  Created by BigL055 on 16/5/24.
//  Copyright © 2016年 bigL.liveTelecast.com. All rights reserved.
//

import UIKit
import AFNetworking


class BLNetWork: NSObject {
    
    // 单例对象
    static let shareInstance: BLNetWork = BLNetWork()
    //AFN 请求管理
    private let httpManager = AFHTTPSessionManager()
    //AFN 网络状态监控
    private let netStausManager = AFNetworkReachabilityManager.sharedManager()
    
}

extension BLNetWork{
    /**
     对AFN Get请求封装
     - parameter UrlStr:          请求Url字符串
     - parameter parameters:      请求参数字典
     - parameter successCallback: 请求成功数据回调
     - parameter failCallback:    请求失败数据回调
     */
    func HttpGet(urlStr urlStr : String ,
                        parameters : [String : AnyObject],
                        successCallback : (jsonData : AnyObject?) -> (),
                        failCallback : (error : AnyObject?) -> ()) -> () {
        
        httpManager.GET(urlStr,
                        parameters: parameters,
                        progress: nil,
                        success: { (NSURLSessionDataTask, jsonData) in
                            //nil值校验
                            guard jsonData != nil else{
                                return
                            }
                            //数据回调
                            successCallback(jsonData: jsonData)
        }){ (_, error) in
            //失败回调
            failCallback(error: error)
        }
    }
    
    //开始监控网络状态
    func startMonitorNetwork() {
        netStausManager.setReachabilityStatusChangeBlock { (AFNetworkReachabilityStatus) in
            // 当网络状态发生改变的时候调用这个block
            switch AFNetworkReachabilityStatus {
            case .ReachableViaWiFi:
                print("WIFI")
                isAllowPlay = true
                NSNotificationCenter.defaultCenter().postNotificationName(kNetworkStausChangeToWiFi, object: nil)
            case .ReachableViaWWAN:
                print("自带网络")
                isAllowPlay = false
                NSNotificationCenter.defaultCenter().postNotificationName(kNetworkStausChangeToWWAN, object: nil)
            case .NotReachable:
                print("没有网络")
                isAllowPlay = true
                NSNotificationCenter.defaultCenter().postNotificationName(kNetworkStausChangeToNone, object: nil)
            case .Unknown:
                print("未知网络")
                isAllowPlay = true
                NSNotificationCenter.defaultCenter().postNotificationName(kNetworkStausChangeToUnknown, object: nil)
            }
        }
        netStausManager.startMonitoring()
    }
    
    //停止监控网络状态
    func stopMonitorNetwork() {
        netStausManager.stopMonitoring()
    }
    
}

